/**
 * 时间对象的Format方法
 * @param {Object} fmt	格式字符串
 */
Date.prototype.Format = function(fmt) {
	var o = {
		"M+": this.getMonth() + 1, //月份
		"d+": this.getDate(), //日
		"h+": this.getHours(), //小时
		"m+": this.getMinutes(), //分
		"s+": this.getSeconds(), //秒
		"q+": Math.floor((this.getMonth() + 3) / 3),
		//季度
		"S": this.getMilliseconds() //毫秒
	};
	if(/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	for(var k in o)
		if(new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
};
/**
 * 数组对象的去空内容的方法
 */
Array.prototype.notempty = function() {
	var res = this.filter(function(value) {
		if(value === "" || value === '' || value === undefined)
			return false;
		else
			return true;
	});
	return res;
}
/**
 * 封装的 Ajax 操作
 * @param {Object}
 * 示例：
 * {
 * 	url		请求连接
 * 	data	请求数据
 * 	success	成功回调方法
 * }
 */
function sendAjax(config) {
	var config = config || {};
	var data = config["data"];

	var touchBtn = config["touchBtn"];
	if(touchBtn != null) {
		addDOMDisable($(touchBtn));
	}

	var ajaxUrl = config.url;
	if(isNull(ajaxUrl)) {
		alert("必须提供url参数！");
	}
	var vmethod = config["method"] || "POST";
	var dataType = config["dataType"] || "json";
	var contentTypes = config['contentType'] || "application/x-www-form-urlencoded";
	var async = config['async'] || true;
	if(vmethod == "GET") {
		$.ajax({
			"type": vmethod,
			"url": ajaxUrl,
			"data": data,
			"cache": false,
			"contentType": contentTypes,
			"beforeSend": function(XMLHttpRequest) {
				var tokenStr = getMgToken();
				if(!isNull(tokenStr))
					XMLHttpRequest.setRequestHeader("token-", tokenStr);
			},
			"success": function(res) {
				if(res.is == 1)
					config['success'](res);
				else if(res.code === "-1") {
					//后台登录session过期
					removeMgUser();
					window.history.back();
				} else {
					if(config['error'] !== undefined) {
						config['error'](res.is, res.msg);
					} else if(toastr !== undefined) {
						toastr.error(res.msg);
					}
				}
			},
			"error": function(XMLHttpRequest, textStatus, errorThrown) {
				console.log("error" + JSON.stringify(XMLHttpRequest));
				console.log(textStatus);
			},
			"complete": function(XMLHttpRequest, textStatus) {
				if(touchBtn != null) {
					addDOMDisable($(touchBtn));
				}
				if(config['complete'] !== undefined) {
					config['complete']();
				}
			},
			"dataType": dataType
		});
	} else {
		$.ajax({
			"type": vmethod,
			"async": async,
			"url": ajaxUrl + "?AREF=" + Math.random(),
			"cache": false,
			"data": data,
			"contentType": contentTypes,
			"beforeSend": function(XMLHttpRequest) {
				var tokenStr = getMgToken();
				if(!isNull(tokenStr))
					XMLHttpRequest.setRequestHeader("token-", tokenStr);
			},
			"success": function(res) {
				if(res.is == 1)
					config['success'](res);
				else if(res.code === "-1") {
					//后台登录session过期
					removeMgUser();
					window.history.back();
				} else {
					if(config['error'] !== undefined) {
						config['error'](res.is, res.msg);
					} else if(toastr !== undefined) {
						toastr.error(res.msg);
					}
				}
			},
			"error": function(XMLHttpRequest, textStatus, errorThrown) {
				console.log("error" + JSON.stringify(XMLHttpRequest));
				console.log(textStatus);
			},
			"complete": function(XMLHttpRequest, textStatus) {
				if(touchBtn != null) {
					removeDOMDisable($(touchBtn));
				}
				if(config['complete'] !== undefined) {
					config['complete']();
				}
			},
			"dataType": dataType
		});
	}
}

function addDOMDisable(doDOM) {
	if(doDOM != null)
		$(doDOM).attr("disabled", "disabled");
}

function removeDOMDisable(doDOM) {
	if(doDOM != null)
		$(doDOM).removeAttr("disabled");
}
/**
 * 公共的加密方法
 * @param {Object} value	加密的对象
 */
function baseDecode(value) {
	if(isNull(value)) {
		return null;
	}
	var res = hex_md5(value);
	return res.toLocaleUpperCase();
}

/**
 * 获取本地缓存数据
 * @param {Object} key		缓存 key
 */
function getLocal(key) {
	if(window.localStorage != null)
		return window.localStorage.getItem(key);
}

/**
 * 新增或修改本地缓存数据
 * @param {Object} key		缓存 key
 * @param {Object} value	缓存值
 */
function setLocal(key, value) {
	if(window.localStorage != null)
		window.localStorage.setItem(key, value);

}

/**
 * 删除本地缓存数据
 * @param {Object} key		缓存 key
 */
function removeLocal(key) {
	if(window.localStorage != null)
		window.localStorage.removeItem(key);
}

/**
 * 获取临时缓存数据
 * @param {Object} key		缓存 key
 */
function getSessionItem(key) {
	if(window.sessionStorage != null) {
		return window.sessionStorage.getItem(key);
	}
}
/**
 * 新增或修改临时缓存数据
 * @param {Object} key		缓存 key
 * @param {Object} value	缓存值
 */
function setSession(key, value) {
	if(window.sessionStorage != null) {
		window.sessionStorage.setItem(key, value);
	}
}

/**
 * 删除临时缓存数据
 * @param {Object} key		缓存 key
 */
function removeSession(key) {
	if(window.sessionStorage != null)
		setSession(key, "");
}

/**
 * 获取 Cookie 缓存数据
 * @param {Object} key		缓存 key
 */
function getCookie(key) {
	if(document.cookie.length > 0) {
		var c_start = document.cookie.indexOf(key + "=")
		if(c_start != -1) {
			c_start = c_start + key.length + 1
			var c_end = document.cookie.indexOf(";", c_start)
			if(c_end == -1)
				c_end = document.cookie.length
			return unescape(document.cookie.substring(c_start, c_end))
		}
	}
	return ""
}

/**
 * 新增或修改 Cookie 缓存数据
 * @param {Object} key		缓存 key
 * @param {Object} value	缓存值
 * @param {Object} expirems	有效时长，毫秒数
 */
function setCookie(key, value, expirems) {
	var exdate = new Date()
	var endTime = exdate.getTime() + parseInt(expirems, 10);
	exdate.setTime(endTime)
	document.cookie = key + "=" + value + ((expirems == null) ? "" : ";expires=" + exdate.toGMTString())
}

/**
 * 校验 Cookie 缓存是存在
 * @param {Object} key		缓存 key
 */
function checkCookie(key) {
	var item = getCookie(key)
	if(!isNull(item)) {
		return true;
	} else {
		return false;
	}
}

/**
 * 内容不为空判定
 * @param {Object} value	判断内容
 */
function isNull(value) {
	if(value === null || value === undefined || value === "" || value === '') return true;
	var regu = "^[ ]+$";
	var re = new RegExp(regu);
	return re.test(value);
}

/**
 * 判断内容是否过短
 * @param {Object} value	判断内容
 * @param {Object} num		最短长度
 */
function isShort(value, num) {
	if(value.length < num) {
		return false;
	}
	return true;
};

/**
 * 判断是否手机号码格式
 * @param {Object} value	判断内容
 */
function isPhone(value) {
	var Mobile = /^0?1[3|4|5|7|8][0-9]\d{8}$/;
	return Mobile.test(value);
};

/**
 * 判断是否数字内容
 * @param {Object} value	判断内容
 */
function isNumber(value) {
	var numReg = new RegExp("^[0-9]*$");
	return numReg.test(value);
};

/**
 * id不为空判定
 * @param {Object} value	判断内容
 */
function isIdNull(value) {
	if(!isNull(value) && value > 0)
		return false;
	else
		return true;
}
/* 公共业务流程 */

/**
 * 设置全局当前配置
 */
function setUploadConfig(configObj) {
	setSession("uploadtype", JSON.stringify(configObj));
}

/**
 * 获取全局当前登录用户对象
 */
function getUploadConfig() {
	var configStr = getSessionItem("uploadtype");
	if(isNull(configStr)) {
		return null;
	} else {
		var configObj = JSON.parse(configStr)
		if(!isNull(configObj.configvalue)) {
			return configObj.configvalue;
		} else {
			return null;
		}
	}
}
/**
 * 移除全局当前用户对象
 */
function removeUploadConfig() {
	removeSession("uploadtype");
}
/**
 * 设置全局当前用户对象
 * @param {Object} user	用户信息
 */
function setMgUser(user) {
	setSession("mguser", JSON.stringify(user));
}

/**
 * 获取全局当前登录用户对象
 */
function getMgUser() {
	var userStr = getSessionItem("mguser");
	if(isNull(userStr)) {
		return null;
	} else {
		return JSON.parse(userStr);
	}
}
/**
 * 移除全局当前用户对象
 */
function removeMgUser() {
	removeSession("mguser");
}
/**
 * 设置全局当前用户对象的密钥
 * @param {Object} token	密钥
 */
function setMgToken(token) {
	setSession("mgusertoken", token);
}

/**
 * 获取全局当前登录用户对象的密钥
 */
function getMgToken() {
	var tokenStr = getSessionItem("mgusertoken");
	if(isNull(tokenStr)) {
		return null;
	} else {
		return tokenStr;
	}
}
/**
 * 移除全局当前用户密钥
 */
function removeMgToken() {
	removeSession("mgusertoken");
}

/*----- start : bootstrap-wysiwyg 封装方法 -----*/
/**
 * 初始化 bootstrap-wysiwyg 区域
 * @param {Object} id
 */
function initWebPageEdit(id) {
	//初始化工具栏
	function initToolbarBootstrapBindings() {
		var fonts = ['Serif', 'Sans', 'Arial', 'Arial Black', 'Courier',
				'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande', 'Lucida Sans', 'Tahoma', 'Times',
				'Times New Roman', 'Verdana'
			],
			fontTarget = $('#fontDropdown');
		$.each(fonts, function(idx, fontName) {
			fontTarget.append($('<li><a data-edit="fontName ' + fontName + '" style="font-family:\'' + fontName + '\'">' + fontName + '</a></li>'));
		});
		$('a[title]').tooltip({
			container: 'body'
		});
		$('.dropdown-menu input').click(function() {
				return false;
			})
			.change(function() {
				$(this).parent('.dropdown-menu').siblings('.dropdown-toggle').dropdown('toggle');
			})
			.keydown('esc', function() {
				this.value = '';
				$(this).change();
			});

		$('[data-role=magic-overlay]').each(function() {
			var overlay = $(this),
				target = $(overlay.data('target'));
			overlay.css('opacity', 0).css('position', 'absolute').offset(target.offset()).width("100%").height("100%");
		});
		if("onwebkitspeechchange" in document.createElement("input")) {
			var editorOffset = $('#inputContent').offset();
			$('#voiceBtn').css('position', 'absolute').offset({
				top: editorOffset.top,
				left: editorOffset.left + $('#editor').innerWidth() - 35
			});
		} else {
			$('#voiceBtn').hide();
		}
	};
	//错误提示
	function showErrorAlert(reason, detail) {
		var msg = '';
		if(reason === 'unsupported-file-type') {
			msg = "Unsupported format " + detail;
		} else {
			console.log("error uploading file", reason, detail);
		}
		$('<div class="alert"> <button type="button" class="close" data-dismiss="alert">&times;</button>' +
			'<strong>File upload error</strong> ' + msg + ' </div>').prependTo('#alerts');
	};
	initToolbarBootstrapBindings();
	$(id).wysiwyg({
		fileUploadError: showErrorAlert
	});
}

/**
 * 重置 ToolBar 到顶部位置
 * @param {Object} contentId
 */
function resetToolBarToTop(contentId) {
	var toolBarDivDOM = $("#" + contentId).prev();
	if(toolBarDivDOM != null && toolBarDivDOM.length > 0) {
		var toolBarBackDOM = toolBarDivDOM.prev();
		toolBarDivDOM.css({
			"position": "relative",
			"top": 0
		});
		if(toolBarBackDOM != null && toolBarBackDOM.length > 0) {
			toolBarBackDOM.addClass("hidden");
		}
	}
}

/**
 * 将 ToolBar 绑定在顶部位置
 * @param {Object} contentId
 */
function bindToolBarInTop(contentId) {
	var webDivDOM = $("#" + contentId).parent();
	var toolBarDivDOM = $("#" + contentId).prev();
	if(webDivDOM != null && webDivDOM.length > 0 &&
		toolBarDivDOM != null && toolBarDivDOM.length > 0) {
		var toolBarBackDOM = toolBarDivDOM.prev();

		var divTop = webDivDOM.offset().top;
		if(divTop < 0) {
			// 当前编辑区域超出屏幕可视区域
			var scrollTop = Math.abs(divTop);
			// 设置工具栏在页面最顶部
			toolBarDivDOM.css({
				"position": "absolute",
				"top": scrollTop + "px"
			});
			if(toolBarBackDOM != null && toolBarBackDOM.length > 0) {
				toolBarBackDOM.removeClass("hidden").css("height", toolBarDivDOM.outerHeight());
			}
		} else {
			toolBarDivDOM.css({
				"position": "relative",
				"top": 0
			});
			if(toolBarBackDOM != null && toolBarBackDOM.length > 0) {
				toolBarBackDOM.addClass("hidden");
			}
		}
	}
}

/*----- end : bootstrap-wysiwyg 封装方法 -----*/

/*----- start : 模块跳转-----*/
/**
 * 跳转模块并且携带参数
 * @param {Object} url		跳转的模块界面名称（包含 .html 名称）
 * @param {Object} param	参数
 */
function modelWithParam(url, param) {
	if(typeof(parent.childJump) === "function") {
		parent.childJump(url, param);
	}
}

/**
 * 解析模块跳转所携带的参数
 * @param {Object} callBack		解析完毕后进行回调（执行参数放入搜索项内）
 */
function decodeModelParam(callBack) {
	// 根据传参配置搜索项
	var paramStr = getSessionItem("param");
	if(!isNull(paramStr)) {
		try {
			var paramJson = JSON.parse(paramStr);
			callBack(paramJson);
		} catch(e) {
			console.log("参数解析失败，请把这个错误提交给开发人员", e);
		} finally {
			removeSession("param");
		}
	}
}
/*----- end : 模块跳转 -----*/

/*----- start : 时间模块封装方法 -----*/
/**
 * 初始化 air-datepicker 对象
 * @param {Object} DOMId			初始化的 DOM Id
 * <div class="input-group">
 * 		<input id="uStartDate" type="text" class="form-control" placeholder="请选择开始提醒时间">
 * 		<div class="input-group-btn">
 * 			<label for="uStartDate" class="btn btn-default" aria-label="开始时间"><span class="glyphicon glyphicon-align-justify"></span></label>
 * 		</div>
 * 	</div>
 * @param {Object} param			预留做参数修改的
 * @param {Object} type				赋值时间类型：null、默认，无类型；1、起始时间；2、截止时间
 * @param {Object} selecrCallBack	时间选择回调，用于设置最大最小日期
 */
function initAirDatePickerObj(DOMId, param, type, selecrCallBack) {
	var formatStr = 'yyyy-mm-dd';
	return new Datepicker(document.getElementById(DOMId), {
		language: 'zh',
		autoClose: true,
		clearButton: true,
		todayButton: true,
		dateFormat: formatStr,
		extraType: type,
		param: param,
		onRenderCell: function(date, cellType) { // 插件日期项渲染时触发
		},
		onSelect: function(fd, date, dpObj) {
			if(selecrCallBack != null) {
				selecrCallBack(date, dpObj);
			}
		}
	});
}

/**
 * 获取 air-datepicker 对象的时间戳
 * @param {Object} airObj		air-datepicker 对象
 */
function getAirDatePickerTimestamp(airObj) {
	var res = null;
	if(airObj != null) {
		var dateObj = airObj.selectedDates.length > 0 ? airObj.selectedDates[0] : null;
		var type = airObj.opts.extraType;
		if(dateObj != null) {
			// 根据类型设置时分秒
			if(type != null) {
				switch(type) {
					case 1: // 起始时间为日期的 00:00:00
						dateObj.setHours(00);
						dateObj.setMinutes(00);
						dateObj.setSeconds(00);
						break;
					case 2: // 结束时间为日期的 23:59:59时刻
						dateObj.setHours(23);
						dateObj.setMinutes(59);
						dateObj.setSeconds(59);
						break;
				}
			}
			//			res = dateObj.getTime();
			res = dateObj.Format("yyyy-MM-dd hh:mm:ss");
		}
	}
	return res;
}

/**
 * 初始化 Bootstrap-datetime 对象
 * @param {Object} DOMId		初始化的 jquery DOM 对象的 Id
 * <div id="sStartDate" class="input-group date form_datetime" data-date-format="yyyy-mm-dd hh:ii">
 * 		<input class="form-control" name="sStartDate" size="16" type="text" value="" placeholder="请选择开始起始时间" readonly>
 * 		<span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span>
 * 		<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
 * </div>
 * @param {Object} param	预留做参数修改的
 * @param {Object} selecrCallBack	时间选择回调，用于设置最大最小日期
 */
function initBsDateDOM(DOMId, param, changeCallBack) {
	var $DOM = $(DOMId);
	if($DOM != null && $DOM.length > 0)
		$DOM.datetimepicker({
			language: 'zh-CN',
			weekStart: 0, // 一周从哪一天开始
			todayBtn: false, // 如果此值为true 或 "linked"，则在日期时间选择器组件的底部显示一个 "Today" 按钮用以选择当前日期
			todayHighlight: true, // 如果为true, 高亮当前日期
			autoclose: true, // 当选择一个日期之后是否立即关闭此日期时间选择器
			startView: 2, // 日期时间选择器打开之后首先显示的视图:0：小时，1：天，2：月，3：年，4：10年
			forceParse: false, // 当选择器关闭的时候，是否强制解析输入框中的值
			showMeridian: true //此选项将启用日间和小时视图的子午线视图
		}).on('changeDate', function(ev) {
			if(ev.date != null && ev.date.valueOf() > 0) {
				if(changeCallBack != null)
					changeCallBack(ev.date);
			}
		});
}

/**
 * 格局时间字符串获取相对应的时间戳
 * @param {Object} dateStr	时间字符串
 */
function getTimestampByDateStr(dateStr) {
	if(isNull(dateStr)) {
		return null;
	}
	var dateObj = new Date(dateStr);
	if(dateObj != null) {
		dateObj.setSeconds(0); // 设置秒数为 0
		return dateObj.getTime();
	} else {
		return null;
	}
}
/*----- end : 时间模块封装方法 -----*/

function getAppUploadToken(callBack) {
	sendAjax({
		url: "/api/outer/upload/getQiniuToken",
		async: false,
		success: function(res) {
			if(callBack != null)
				callBack(res.data);
		},
		error: function(is, msg) {
			alert(msg);
		}
	});
}
/*----- end : 前端直传七牛文件上传业务 -----*/

/*----- start : 前端直传服务器文件上传业务 -----*/
function uploadFileToSeverLocal(file, callBack) {
	var form = new FormData();
	form.append("fileStream", file);

	$.ajax({
		type: 'POST',
		url: uploadFileAction(),
		data: form,
		cache: false,
		processData: false,
		contentType: false,
		async: false,
		success: function(res) {
			if(typeof(res) == "string")
				res = JSON.parse(res);
			if(callBack != null)
				callBack(res.data);
		},
		error: function(is, msg) {
			toastr.error(msg);
		}
	});
}
/*----- end : 前端直传服务器文件上传业务 -----*/

/*----- start : 前端直传服务器文件上传业务 -----*/
function uploadFileToSever(file, callBack) {
//	var uploadType = getUploadConfig();
	var uploadType = "qiniuyun";
	if(uploadType == "qiniuyun") {
		uploadFileToQiniu(file, callBack)
	} else {
		uploadFileToSeverLocal(file, callBack);
	}
}
/*----- end : 前端直传服务器文件上传业务 -----*/

/*----- start : bs-table 表单相关的共用业务 -----*/
function tableOrigImgMouseOver(e) {
	var dom = e.target;
	var imgSrc = $(dom).attr("src");

	// 不存在的时候，进行强制添加
	if($("#tableOrigImg").length <= 0) {
		$(document.body).append("<img id='tableOrigImg' class='orig-img' />");
	}
	var left = $(dom).offset().left + $(dom).outerWidth(),
		top = $(dom).offset().top;
	// 判断显示的区域是否超出可视区域
	var bodyH = $(document.body).outerHeight(true),
		bodyW = $(document.body).outerWidth(true);
	$("#tableOrigImg").attr("src", imgSrc).css({
		"left": left,
		"display": "block",
		"opacity": 0
	});
	if(top + $("#tableOrigImg").outerHeight() > bodyH) { // 高度超出
		top = bodyH - $("#tableOrigImg").outerHeight();
	}
	if(left + $("#tableOrigImg").outerWidth() > bodyW) { // 宽度超出，移动到左侧
		left = $(dom).offset().left - $("#tableOrigImg").outerWidth();
	}
	$("#tableOrigImg").css({
		"left": left,
		"top": top,
		"opacity": 1
	});
}

function tableOrigImgMouseOut(e) {
	// 存在的时候，才能进行操作
	if($("#tableOrigImg").length > 0) {
		$("#tableOrigImg").attr("src", "").css({
			"left": 0,
			"top": 0,
			"display": "none"
		});
	}
}

function formatTableOrigImg(value, colModel, row) {
	if(!isNull(value))
		return "<img class='icon-s' src='" + value + "' onmouseover='tableOrigImgMouseOver(event)' onmouseout='tableOrigImgMouseOut(event)'/>";
	else
		return "-";
}

function formatTableMny(value, colModel, row) {
	if(!isNull(value)) {
		if(typeof(value) == "string") {
			value = parseInt(value, 10);
		}
		var amount = parseFloat(value / 100);
		return amount.toFixed(2);
	} else
		return "-";
}

function formatTableJumpId(value, colModel, row) {
	if(!isNull(value))
		return '<a href="javascript:void(0)">' + value + '</a>';
	else
		return "-";
}
/*----- end : bs-table 表单相关的共用业务 -----*/

/*----- start : modal相关的共用业务 -----*/
function refreshModalUpload(DOMId, fileUrl, callBack, extra, isQiNiuUpload) {
	var uploadDOM = $("#" + DOMId);
	if(uploadDOM.length < 0) {
		return;
	}
	var statusDOM = uploadDOM.children("label[manage='status']");
	var bigBtnDOM = uploadDOM.children("button[manage='showBig']");
	if(!isNull(fileUrl)) { // 已上传头像
		if(isQiNiuUpload != null && isQiNiuUpload) {
			statusDOM.html("文件已上传，等待提交");
			bigBtnDOM.removeAttr("data-url").hide();
		} else {
			statusDOM.html("已上传");
			bigBtnDOM.attr("data-url", fileUrl).show();
		}
	} else { // 尚未上传
		statusDOM.html("尚未上传");
		bigBtnDOM.removeAttr("data-url").hide();
	}
	var fileInputDOM = uploadDOM.find("input[manage='fileInput']");

	fileInputDOM.unbind("change").bind("change", function() {
		var file = $(this).get(0).files[0];
		if(file != null && file != undefined)
			uploadFileToSever(file, function(qiNiuRes) {
				toastr.success("上传成功");
				callBack(qiNiuRes, extra);
				refreshModalUpload(DOMId, qiNiuRes.fileurl, callBack, extra, true);
			})
	});
	bigBtnDOM.unbind("click").bind("click", function() {
		var imgUrl = $(this).data("url");
		if(!isNull(imgUrl)) {
			showBigImgModal(imgUrl);
		}
	});
}

function showBigImgModal(imgUrl) {
	if(isNull(imgUrl)) {
		return;
	};
	if($("#bigImgModal").length <= 0) {
		var BIG_IMG_MODAL_HTML = "<div id='bigImgModal' class='modal fade bs-example-modal-lg' tabindex='1' role='dialog'>" +
			"<div class='modal-dialog' role='document'>" +
			"<div class='modal-content'>" +
			"<div class='modal-header'>" +
			"<button type='button' class='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>&times;</span></button>" +
			"<h4 class='modal-title'>查看大图</h4>" +
			"</div>" +
			"<div class='modal-body text-center'>" +
			"<img manage='bigImg' />" +
			"</div>" +
			"</div>" +
			"</div>" +
			"</div>";
		$(document.body).append(BIG_IMG_MODAL_HTML);
	}
	$("#bigImgModal").find("img[manage='bigImg']").attr("src", imgUrl);
	$("#bigImgModal").modal('show');
}

function showPriviewModal(actionName, id) {
	if(isNull(actionName) || isNull(id)) {
		return;
	};
	var priviewUrl = "http://www.baidu.com";
	var param = {};
	param[actionName + "id"] = id;

	var newTab = window.open('about:blank');
	sendAjax({
		url: projectGetAction(MODULE_NAME),
		method: "GET",
		data: param,
		async: false,
		success: function(res) {
			var editModuleObj = res.data;

			priviewUrl = eval("editModuleObj." + actionName + "url");

			//			if($("#basePriviewModal").length <= 0) {
			//				var BIG_IMG_MODAL_HTML = "<div id='basePriviewModal' class='modal fade bs-example-modal-lg' tabindex='1' role='dialog'>" +
			//					"<div class='modal-dialog modal-lg' role='document'>" +
			//					"<div class='modal-content'>" +
			//					"<div class='modal-header'>" +
			//					"<button type='button' class='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>&times;</span></button>" +
			//					"<h4 class='modal-title'>预览</h4>" +
			//					"</div>" +
			//					"<div class='modal-body text-center'>" +
			//					"<iframe manage='prevIframe' class='priview-iframe'></iframe>" +
			//					"</div>" +
			//					"</div>" +
			//					"</div>" +
			//					"</div>";
			//				var BIG_IMG_MODAL_HTML = "<a class='hidden' target='_blank'>预览</a>";
			//				$(document.body).append(BIG_IMG_MODAL_HTML);
			//			}
			//			$("#basePriviewModal").find("iframe[manage='prevIframe']").attr("src", priviewUrl);
			//			$("#basePriviewModal").modal('show');

			//			if($("#newPreviewPage").length <= 0) {
			//				var NEW_PAGE_LINK_HTML = "<a id='newPreviewPage' class='hidden' target='_blank'>预览</a>";
			//				$(document.body).append(NEW_PAGE_LINK_HTML);
			//			}
			//			$("#newPreviewPage").attr("src", priviewUrl);
			//			$("#newPreviewPage").click();

			newTab.location.href = priviewUrl;
		},
		error: function(is, msg) {
			toastr.error(msg);
		}
	});
}

/*----- end : modal相关的共用业务 -----*/

/*----- start : bootstrap-wysiwyg 封装方法 -----*/
/**
 * 初始化 kindeditor 区域
 */
function initKindEditor(id) {
	var config = {
		"width": "100%",
		"height": 450,
		"resizeType": 0,
		"autoHeightMode": false,
		"items": [
			'source', '|',
			'undo', 'redo', '|',
			'preview', 'cut', 'copy', 'paste', 'plainpaste', 'wordpaste', '|',
			'justifyleft', 'justifycenter', 'justifyright',
			'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'clearhtml', 'quickformat', 'selectall', '/',
			'formatblock', 'fontname', 'fontsize', '|',
			'forecolor', 'hilitecolor', 'bold', 'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|',
			'image', 'multiimage', 'insertfile', 'link', 'unlink'
		],
		"allowImageRemote": false,
		"uploadJson": getUploadEditorAction(),
		"filePostName": "fileStream",
		"formatUploadUrl": false
	};
	// kindeditor 初始化
	var editor = KindEditor.create('#' + id, config);
	return editor;
}

/*----- end : kindeditor 封装方法 -----*/